From: Florian Müllner Date: Wed, 28 Mar 2012 13:25:33 +0000 (+0200) Subject: workspacesDisplay: Connect to 'notify::n-workspaces' early X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~6523 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=76005f5adfda0324925a55053a42a74c34a54c03;p=gnome-shell.git workspacesDisplay: Connect to 'notify::n-workspaces' early Currently we only connect to the 'notify::n-workspaces' signal the first time the overview is shown, which means we will miss any changes to the workspace layout in the meanwhile. In particular, the decision of whether the workspace switcher should be shown is taken before the dynamic workspace handling takes over, and is thus based entirely on the value of the num-workspaces user preference rather than the actual number of workspaces. Just connect the signal in _init() (with the nice side-effect to make it explicit that the signal handler won't ever be disconnected). https://bugzilla.gnome.org/show_bug.cgi?id=673198 --- diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js index e364509f2..df3143fef 100644 --- a/js/ui/workspacesView.js +++ b/js/ui/workspacesView.js @@ -529,9 +529,11 @@ const WorkspacesDisplay = new Lang.Class({ this._updateAlwaysZoom(); })); + global.screen.connect('notify::n-workspaces', + Lang.bind(this, this._workspacesChanged)); + this._switchWorkspaceNotifyId = 0; - this._nWorkspacesChangedId = 0; this._itemDragBeginId = 0; this._itemDragCancelledId = 0; this._itemDragEndId = 0; @@ -570,9 +572,6 @@ const WorkspacesDisplay = new Lang.Class({ global.screen.connect('restacked', Lang.bind(this, this._onRestacked)); - if (this._nWorkspacesChangedId == 0) - this._nWorkspacesChangedId = global.screen.connect('notify::n-workspaces', - Lang.bind(this, this._workspacesChanged)); if (this._itemDragBeginId == 0) this._itemDragBeginId = Main.overview.connect('item-drag-begin', Lang.bind(this, this._dragBegin)); @@ -925,19 +924,16 @@ const WorkspacesDisplay = new Lang.Class({ }, _workspacesChanged: function() { - let oldNumWorkspaces = this._workspaces[0].length; - let newNumWorkspaces = global.screen.n_workspaces; - let active = global.screen.get_active_workspace_index(); - - if (oldNumWorkspaces == newNumWorkspaces) - return; - this._updateAlwaysZoom(); this._updateZoom(); if (this._workspacesViews == null) return; + let oldNumWorkspaces = this._workspaces[0].length; + let newNumWorkspaces = global.screen.n_workspaces; + let active = global.screen.get_active_workspace_index(); + let lostWorkspaces = []; if (newNumWorkspaces > oldNumWorkspaces) { let monitors = Main.layoutManager.monitors;